﻿using System.Data.Entity;
using Budjelar.Model.Entities;
using Budjelar.Repository;
using Budjelar.Repository.EF;
using Budjelar.Web.App_Start;
using Budjelar.Web.Services;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Linq;

namespace Budjelar.Tests.Services
{
    [TestClass]
    public class ArtikliServiceFixtures
    {

        [ClassInitialize]
        public static void ClassInit(TestContext ctx)
        {
        }

        [TestInitialize]
        public void TestInit()
        {
            var db = new BudjelarDbContext().Database;
            if (db.Exists())
            {
                db.Delete();
            }
            db.CreateIfNotExists();
        }

        [TestMethod]
        public void Insert()
        {
            // Arrange
            var artikliService = new ArtikliService(new Repository<Artikal>());
            var artikal = new Artikal {Naziv = "Test", State = State.Added};

            // Act
            artikliService.SacuvajArtikal(artikal, null);

            // Assert
            var repo = new Repository<Artikal>();
            var snimljen = repo.Single();
            Assert.IsNotNull(snimljen);
            Assert.AreEqual("Test", snimljen.Naziv);
        }

        [TestMethod]
        public void Update()
        {
            // Arrange
            var artikal = new Artikal { Naziv = "Test", State = State.Added};
            artikal.VrsteArtikla.Add(new VrstaArtikla{NazivVrste = "Vrsta 1"});
            artikal.VrsteArtikla.Add(new VrstaArtikla { NazivVrste = "Vrsta 2" });
            new ArtikliService(new Repository<Artikal>()).SacuvajArtikal(artikal, null);

            artikal.Naziv = "Test 1";
            artikal.State = State.Modified;
            var prvaVrsta = artikal.VrsteArtikla.First();
            artikal.VrsteArtikla.RemoveAt(0);

            // Act
            new ArtikliService(new Repository<Artikal>()).SacuvajArtikal(artikal, new[]{prvaVrsta});

            var repo = new Repository<Artikal>();
            // Assert
            var snimljen = repo.Single();
            Assert.IsNotNull(snimljen);
            Assert.AreEqual("Test 1", snimljen.Naziv);
            Assert.AreEqual(1, snimljen.VrsteArtikla.Count);
        }
    }
}